/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package managers;

import conexionBD.ConexionServidor;
import java.io.Serializable;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import javax.servlet.jsp.jstl.sql.Result;
import javax.servlet.jsp.jstl.sql.ResultSupport;

/**
 *
 * @author ruanda
 */
@ManagedBean
@SessionScoped
public class managerAsignarEstado implements Serializable {

    private Integer estadoseleccionado;
    private String numeroexpe;
    private String numeroexpeEncontrado;
    FacesContext context;

    /** Creates a new instance of managerAsignarEstado */
    public managerAsignarEstado() {
    }

    public Integer getEstadoseleccionado() {
        return estadoseleccionado;
    }

    public void setEstadoseleccionado(Integer estadoseleccionado) {
        this.estadoseleccionado = estadoseleccionado;
    }

    public String getNumeroexpeEncontrado() {
        return numeroexpeEncontrado;
    }

    public void setNumeroexpeEncontrado(String numeroexpeEncontrado) {
        this.numeroexpeEncontrado = numeroexpeEncontrado;
    }

    public String getNumeroexpe() {
        return numeroexpe;
    }

    public void setNumeroexpe(String numeroexpe) {
        this.numeroexpe = numeroexpe;
    }

    public List<SelectItem> getListaEstado() {
        ConexionServidor myConexion = new ConexionServidor();
        List<SelectItem> tipoPropiedad = new ArrayList<SelectItem>();
        tipoPropiedad.add(new SelectItem("0", "-seleccione uno-"));
        try {
            Connection con = myConexion.getConnection();
            Statement st = con.createStatement();
            ResultSet rs = st.executeQuery("select * from estado_expediente");
            while (rs.next()) {
                tipoPropiedad.add(new SelectItem(rs.getInt("idestado_expediente"), rs.getString("nombreestadoexp")));
            }
            rs.close();
            st.close();
            con.close();
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }
        return tipoPropiedad;
    }

    public Boolean hayResultados() throws Exception {
        ConexionServidor miConexion = new ConexionServidor();
        ResultSet rs = null;
        Boolean isNotEmpty = null;
        try {
            Connection con = miConexion.getConnection();
            PreparedStatement ps = con.prepareStatement("select * from expediente where idexpediente = ?");
            ps.setString(1, numeroexpe);
            rs = ps.executeQuery();
            isNotEmpty = rs.next();
            rs.close();
            ps.close();
            con.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return isNotEmpty;
    }

    public String buscandoInfo() throws Exception {
        String destino = null;
        if (hayResultados()) {
            numeroexpeEncontrado = numeroexpe;
        } else {
            context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "BUSQUEDA EXPEDIENTE", "El expediente ingresado no existe"));
            limpiar();
        }
        return destino;
    }

    public Result getListaExpediente() throws Exception {
        ConexionServidor miConexion = new ConexionServidor();
        Connection conn = miConexion.getConnection();
        try {
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("select idexpediente, nombreestadoexp from estado_expediente, expediente where expediente.idestado_expediente = estado_expediente.idestado_expediente ");
            return ResultSupport.toResult(rs);
        } finally {
            conn.close();
        }
    }

    public void cambiarEstado() {
        ConexionServidor myConexion = new ConexionServidor();
        try {
            Connection con = myConexion.getConnection();
            //Sentencia sql que hace el llamado a el procedimiento
            String sql = ("update expediente set idestado_expediente = ? where idexpediente = ?");
            PreparedStatement ps = con.prepareStatement(sql);
//            CallableStatement cs = con.prepareCall(sql);
            //Setting the parameters to be catched by the stored procedure
            //DATOS INMUEBLE
            ps.setInt(1, estadoseleccionado);
            ps.setString(2, numeroexpeEncontrado);
            ps.execute();
            limpiar();
            //Mensaje de actualizacion exitosa
            context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "ASIGNACION DE ESTADO", "Estado de expediente asignado con exito"));
            //cierre de CallableStatement y Connection
            ps.close();
            con.close();
        }
        catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

    public void limpiar() {
        numeroexpe = "";
        numeroexpeEncontrado = "";
        estadoseleccionado = 0;

    }

    public String  salir(){
        String destino= "hacia-bienvenido";
        limpiar();
        return destino;
            }
    }

